<?php
namespace App\Services\WxMass;

use App\Services\WxMass\Filter\FilterInterface;

/**
 * 微信过滤条件工厂类
 * @package App\Services\Filter
 */
class FilterFactory
{
    //保存到数据库中的中的过滤类别
    const INPUT_TYPE_ALL = 'all';//所有人
    const INPUT_TYPE_TAGID = 'tagid';//指定用户标签
    const INPUT_TYPE_OPENIDS = 'openids';//指定用户openid
    const INPUT_TYPE_AREA = 'area';//根据地区筛选
    const INPUT_TYPE_FILE = 'file';//文件导入方式


    //输出过滤类别，不管保存的过滤方式为哪几种，但最终输出调用的方式只能为如下三种方式
    const OUTPUT_TYPE_ALL = 'all';//所有人
    const OUTPUT_TYPE_TAGID = 'tagid';//指定用户tagId
    const OUTPUT_TYPE_TOUSER = 'touser';//指定用户openid

    //筛选名称列表
    private $inputTypeList;
    //筛选对象列表
    private $filterObjList;
    /**
     * 构造函数
     */
    public function __construct()
    {
        //筛选类别列表
        $this->inputTypeList = [
            self::INPUT_TYPE_ALL => '所有人',
            self::INPUT_TYPE_TAGID => '指定用户标签',
            self::INPUT_TYPE_OPENIDS => '指定用户openId',
            //self::INPUT_TYPE_AREA => '区域',
            //self::INPUT_TYPE_FILE => '文件导入',
        ];
        //过滤对象列表
        $this->filterObjList = [
            self::INPUT_TYPE_ALL => __NAMESPACE__ . '\Filter\FilterAll',
            self::INPUT_TYPE_TAGID => __NAMESPACE__ . '\Filter\FilterTagid',
            self::INPUT_TYPE_OPENIDS => __NAMESPACE__ . '\Filter\FilterOpenids',
            self::INPUT_TYPE_AREA => __NAMESPACE__ . '\Filter\FilterArea',
            self::INPUT_TYPE_FILE => __NAMESPACE__ . '\Filter\FilterFile',
        ];
    }

    /**
     * 获取筛选类别列表
     * @return array
     */
    public function getFilterTypeList()
    {
        return $this->inputTypeList;
    }

    /**
     * 获取筛选对象
     * @param $type
     * @return FilterInterface
     */
    public function createFilterObj($type)
    {
        if (!array_key_exists($type, $this->filterObjList)){
            throw new \InvalidArgumentException("$type 无效的筛选类别");
        }
        return new $this->filterObjList[$type];
    }
}